home
***
CD-ROM
|
disk
|
FTP
|
other
***
search
/
FM Towns: Free Software Collection 11
/
FM Towns Free Software Collection 11.iso
/
t_os
/
shell
/
vl
/
src
/
vl.c
< prev
next >
Wrap
Text File
|
1995-08-15
|
4KB
|
196 lines
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#include <winb.h>
#include <te.h>
#include <fntb.h>
#include <gui.h>
#include <egb.h>
#include <guidbg.h>
#include <kh.h>
char *guiEgbPtr ; /* EGB のワークアドレス */
int iconDialogID = -1 ;
int dummyDButtonID = -1 ;
int iconQuitIconID = -1 ;
int barIconID = -1 ;
int minIconID = -1 ;
int maxIconID = -1 ;
//#define DEBUG
unsigned char beforeLevel = 1 ;
unsigned char nowLevel = 0 ;
int quitFuncRet = ILLEGAL_FUNCTION ;
int userFunc(apliId, messId, info, data)
int apliId;
int messId;
int info;
int data;
{
register int ret;
ret = ILLEGAL_FUNCTION;
switch(messId)
{
case GM_QUIT :
MMI_SendMessage(iconQuitIconID,MM_EXEC,2,0,0);
ret = quitFuncRet ;
break;
}
return(ret);
}
void main(int argc,char *argv[])
{
int x=276;
int y=225;
if(argc>1)
{
x = ((argv[1])[0])*1000 + ((argv[1])[1])*100
+ ((argv[1])[2])*10 + (argv[1])[3] - ('0'*1111);
if(argc>2)
y = ((argv[2])[0])*1000 + ((argv[2])[1])*100
+ ((argv[2])[2])*10 + (argv[2])[3] - ('0'*1111);
}
#ifdef DEBUG
printf("(%d,%d)\n",x,y);
#endif
static MMICTRL mmi ={
SCREEN16|SCREENIGNORE, // ページ0側解像度
SCREENUNUSED, // ページ1側解像度
0, // 書き込みページ
SCREENAVAILABLE, // 表示ページ
0, // 表示プライオリティ
SCREENAVAILABLE, // 色数
SCREENEXPAND, // VRAMの横の長さ
0, // メモリ領域の大きさ
NULL, // メモリ領域のアドレス
0, // ユーザ領域の大きさ
NULL, // ユーザ領域のアドレス
0, 0, // 画面枠 lupx,lupy
0, 0, // rdwx,rdwy
-16384, -16384, // 移動枠 lupx,lupy
16383, 16383, // rdwx,rdwy
15, // 白色
8, // 黒色
7, // 灰色
6 // 反転色
};
extern int APL_init() ;
/* 初期化処理 */
if (MMI_Open( &mmi ) == NOERR)
{
/* 初期化に成功すればメインループに入る. */
if (APL_init(x,y) == NOERR)
MMI_ExecSystem() ;
}
/* 終了処理 */
MMI_Close() ;
}
int APL_init(int sx,int sy)
{
extern MMIINIT initDataGUI ;
register int ret ;
/* EGB ワークアドレスの取得. */
guiEgbPtr = MMI_GetEgbPtr() ;
/* ユーザアイコン設定 */
extern unsigned char *iconTbl[];
extern int iconMaxId;
MMI_SetIconTable(iconTbl, iconMaxId);
/* ハイパ型部品の初期化 */
if ((ret = MMI_initHyper()) < 0)
return ret ;
/* ダイアログ型部品の初期化 */
if ((ret = MMI_initDialogL40()) < 0)
return ret ;
/* ボタン型部品の初期化 */
if ((ret = MMI_initButtonL40()) < 0)
return ret ;
/* ドロウボタン型部品の初期化 */
if ((ret = MMI_initDrawButtonL40()) < 0)
return ret ;
/* アイコンボタン型部品の初期化 */
if ((ret = MMI_initIconL40()) < 0)
return ret ;
/* 背景データの初期化 */
/* データの登録 */
if ((ret = MMI_Init(&initDataGUI)) < 0)
return ret ;
// Tmenuにパレットを合わせる
KH_initGuiColor();
// 初期位置に移動
HYPER hyp;
FRAME fr;
MMI_SendMessage(iconDialogID,MM_GETHYPER,1,&hyp);
fr.lupx = sx ;
fr.lupy = sy ;
fr.rdwx = sx + (hyp.fr.rdwx-hyp.fr.lupx) ;
fr.rdwy = sy + (hyp.fr.rdwy-hyp.fr.lupy) ;
MMI_SendMessage(iconDialogID,MM_MOVE,1,&fr);
/* 背景を表示する */
MMI_SendMessage(MMI_GetBaseObj(), MM_SHOW, 0) ;
MMI_SendMessage(MMI_GetBaseObj(), MM_SETEXEC, 1, userFunc);
MMI_CallMessage(MMI_GetApliId(), GM_TITLE, (int)"vl By 機拡", 0);
extern void userIdleTask();
MMI_SetIdleTaskFunc( userIdleTask );
_outb(0x04e8,0x00); //ADSD FIFO flash
userIdleTask();
return NOERR ;
}
void userIdleTask(void)
{
nowLevel = (_inb(0x04e7) & 0x7f)>>3;
if(nowLevel==beforeLevel) return ;
if(nowLevel<beforeLevel) beforeLevel-- ;
else beforeLevel = nowLevel ;
MMI_SendMessage(barIconID,MM_SETSHAPE,1,513+beforeLevel);
MMI_SendMessage(barIconID,MM_SHOW,0);
return ;
}
/* initDataGUI:iconQuitIconID:MJ_ICONL40の呼び出し関数 */
int iconQuitFunc(kobj, messId, argc, pev, trigger)
int kobj ;
int messId ;
int argc ;
EVENT *pev ;
int trigger ;
{
MMI_SetHaltFlag(TRUE);
quitFuncRet = NOERR ;
return NOERR ;
}